// -*- coding: utf-8 -*- 
/**
 * Project: AlgorithmsLearn
 *
 * @author: yanking
 * Create time: 2022-03-16 14:12
 * IDE: IntelliJ IDEA
 * Introduction:
 */
package com.LeetCodeT.ArraysTrain;

public class SingleNumber {
    /**
     * 找出数组中只出现一次的数字 -> 原地hash
     * 出现了两次的数字当前值应该大于2*i+n
     * 根据列表中的元素数据小于n
     */
    public int singleNumberT(int[] nums) {
        int n = nums.length;
        if (n == 1) {
            return nums[0];
        }
        for (int i = 0; i < n; i++) {
            // 原地hash
            nums[nums[i] % n] += n;
        }
        int i = 0;
        for (; i < n; i++) {
            if (nums[i] > n && nums[i] <= 2 * n) {
                break;
            }
        }
        return i;
    }

    /**
     * 异或运算
     *
     * @param nums
     * @return
     */
    public int singleNumber(int[] nums) {
        int n = nums.length, res = nums[0];
        for (int i = 1; i < n ; i++) {
            res ^= nums[i];
        }
        return res;
    }
}
